package kontroler;

import com.toedter.calendar.JDateChooser;
import javafx.application.Application;
import model.Plec;
import model.Worker;
import model.WorkerTableModel;

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import java.util.ArrayList;
import java.util.Date;

/**
 * Author: Daniel
 * Date: 30.09.13
 */

public class Presenter {

    private JTextField imieTF;
    private JTextField nazwiskoTF;
    private JDateChooser dataUrodzenieDC;
    private JComboBox<Plec> plecCB;
    private JButton zapiszBT;
    private JTable table;
    private JButton usunBT;
    private JMenuItem zapiszItem;
    private JMenuItem zamknijItem;


    class SluchaczPrzyciskuZapiszBT implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            String imie = imieTF.getText();
            String nazwisko = nazwiskoTF.getText();
            Date data = dataUrodzenieDC.getDate();
            String plec = plecCB.getSelectedItem().toString();

            Worker pracownik = new Worker(imie, nazwisko, data, plec);

            WorkerTableModel workerTableModel = (WorkerTableModel) table.getModel();
            workerTableModel.dodajPracownika(pracownik);

            wyczyscFormularz();
        }
    }

    private void wyczyscFormularz() {
        imieTF.setText("");
        nazwiskoTF.setText("");
        dataUrodzenieDC.setDate(new Date());
        plecCB.setSelectedIndex(0);
    }

    class SluchaczPrzyciskuUsunBT implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            int numerZaznaczonegoWiersza = table.getSelectedRow();
            if (numerZaznaczonegoWiersza < 0) {
                JOptionPane.showMessageDialog(
                        null,
                        "Nie zaznaczono wiersza",
                        "Uwaga",
                        JOptionPane.INFORMATION_MESSAGE);
            } else {
                WorkerTableModel workerTableModel = (WorkerTableModel) table.getModel();
                workerTableModel.usuńPracownika(numerZaznaczonegoWiersza);
            }
        }
    }

    class SluchaczPrzyciskuZapiszItem implements ActionListener {

            @Override
            public void actionPerformed(ActionEvent e) {
                zapiszDaneDoPliku();
            }
    }

    public void zapiszDaneDoPliku() {
        try {
            FileOutputStream fos = new FileOutputStream("ListaPracownikow.dat");
            BufferedOutputStream bos = new BufferedOutputStream(fos);
            ObjectOutputStream oos = new ObjectOutputStream(bos);

            WorkerTableModel workerTableModel = (WorkerTableModel) table.getModel();
            ArrayList<Worker> listaPracowników= workerTableModel.getListaWierszy();

            oos.writeObject(listaPracowników);
            oos.close();
        } catch (Exception e1) {
            e1.printStackTrace();
        }
    }

    public ArrayList<Worker> odczytajDaneZPliku() {
        try {
            FileInputStream fis = new FileInputStream("ListaPracownikow.dat");
            BufferedInputStream bis = new BufferedInputStream(fis);
            ObjectInputStream ois = new ObjectInputStream(bis);

            ArrayList<Worker> listaPracownikow = (ArrayList<Worker>)ois.readObject();
            return listaPracownikow;
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, e, "Uwaga", JOptionPane.INFORMATION_MESSAGE);
            return null;
        }
    }

    class SluchaczPrzyciskuZamknijItem implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent e) {
            System.exit(0);
        }
    }

    public void setImieTF(JTextField imieTF) {
        this.imieTF = imieTF;
    }

    public void setNazwiskoTF(JTextField nazwiskoTF) {
        this.nazwiskoTF = nazwiskoTF;
    }

    public void setDataUrodzenieDC(JDateChooser dataUrodzenieDC) {
        this.dataUrodzenieDC = dataUrodzenieDC;
    }

    public void setPlecCB(JComboBox<Plec> plecCB) {
        this.plecCB = plecCB;
    }

    public void setZapiszBT(JButton zapiszBT) {
        this.zapiszBT = zapiszBT;
        this.zapiszBT.addActionListener(new SluchaczPrzyciskuZapiszBT());
    }

    public void setTable(JTable table) {
        this.table = table;
    }

    public void setZapiszItem(JMenuItem zapiszItem) {
        this.zapiszItem = zapiszItem;
        this.zapiszItem.addActionListener(new SluchaczPrzyciskuZapiszItem());
    }

    public void setZamknijItem(JMenuItem zamknijItem) {
        this.zamknijItem = zamknijItem;
        this.zamknijItem.addActionListener(new SluchaczPrzyciskuZamknijItem());
    }

    public void setUsunBT(JButton usunBT) {
        this.usunBT = usunBT;
        this.usunBT.addActionListener(new SluchaczPrzyciskuUsunBT());
    }
}
